package com.richpay.basejava.base14;

/**
 * 数组: 具有相同数据类型值的集合。
 * 数组的声明方式： 数据类型[] 数组名;或者数据类型 数组名[];
 * 建议采用数据类型[] 数组名;的声明方式
 * <p>
 * 如：
 * int[] array;
 * int intArray[];
 * 都是合法的
 * <p>
 * 声明数组时是不分配存储空间的。
 * 在java中声明数组时不能指定其存储元素的个数，即不能指定数组的大小。
 * <p>
 * 数组必须在实例化时指定其大小，即存储元素的个数，数组的实例化个数。
 * 数组名=new 数据类型[数组元素的个数];
 * 如：array=new int[10];
 * <p>
 * 数组实例化后数组中的元素是否有默认值呢？
 * 有，对于不同数据类型的数组，其默认值是不同的。
 * 对于java的八大基本数据类型而言：
 * byte、short、int、long数组的默认值是0；
 * float、double数组的默认值是：0.0f和0.0d；
 * char数组的默认值是：\u0000,即空；
 * boolean数组的默认值是：false
 * <p>
 * 对于引用数据类型的数组而言，其默认值都是：null
 * <p>
 * 数组的声明和实例化
 * 数据类型[] 数组名=new 数据类型[数组中元素的个数];
 * 解说：
 * 数据类型：指定是数组中元素的数据类型。
 * []:代表是一维数组类型。
 * new:代表分配内存空间。
 * 数组中元素的个数:其实就是数组的大小，即数组中存储元素的个数，只能为自然数。
 * <p>
 * 数组的访问方式：
 * 数组名[数组的索引值]：数组的索引值从0开始的，即0，1，2，3……
 * 数组有一个唯一的属性：length-表示数组中元素的个数。
 */
public class ArrayDemo {

    public static void main(String[] args) {
        //声明数组
        String[] array;
        //实例化数组
        array = new String[10];

        //String[] array=new String[10];//数组的声明和实例化。
        /**
         * 数组的初始化
         * 一、静态初始化
         */
        //方式1：
        int[] intArray = new int[]{1, 3, 5, 7, 9};//这种静态初始化
        //一定不能指定数组中元素的个数，因为这个个数由编译器通过{}中的元素个数自动计算的。

        //方式2：
        int[] intArray2 = {1, 3, 5, 7, 9};//常用的数组的静态初始化方式，需要注意的是：
        //这种写法不能作为二维数组中第二维数组的初始化方式。

        /**
         * 二、数组的动态初始化:
         * 数组声明和实例化后有默认值后进行二次赋值。
         */
        int[] array1 = new int[10];
        int len = array1.length;
        for (int i = 0; i < len; i++) {
            array1[i] = 2 * i + 1;//对数组显示进行了二次赋值。
        }

        len = array1.length;//得到数组的大小，即数组中元素的个数。
        System.out.println("len=" + len);

        for (int i = 0; i < len; i++) {
            System.out.println("array1[" + i + "]=" + array1[i]);
        }
        //  System.out.println(array[len]);//错误
        //  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        //	at com.richpay.basejava.base14.ArrayDemo.main(ArrayDemo.java:79)

        /**
         * byte [] 的应用，数据传输和数据加密领域
         *
         * 金融POS端加密终端主密钥、传输秘钥、磁道秘钥等。
         */

    }
}
